# author： Zichen
# date: 2021-02-03
# vision: 1.0
# instruction：检查IP模块

from multiping import MultiPing  # 使用该模块检查ip
from rich.console import Console
from rich.panel import Panel
console = Console()  # 创建控制台
orange = '#ffb74d'
cyan = '#63e6be'
grey = '#bdbdbd'


def Check_IP_print(response, no_response):
    '''
    显示结果
    参数：
    response 接收到回复的地址
    no_response 未接收到回复的地址
    '''
    # 加入逻辑判断：列表无元素时返回None
    if len(response) == 0:
        response = None
    if len(no_response) == 0:
        no_response = None
    console.log('[bold green]IP检查完成√')
    console.print(Panel('[bold %s]\
已接收到回复：%s\n\
未接收到回复：%s' % (orange, response, no_response)))


def Check_IP(IP):
    '''
    ping检查（Qmsg酱IP地址ping后超时，原因未知）
    参数：
    IP 需要检查的IP地址，用字典形式输入
        格式{'ip地址':'域名'}
    '''
    try:
        response = []  # 用来储存接收到回复的域名
        no_response = []  # 用来储存未接收到回复的域名
        IP_lst = IP.keys()  # 传入字典后获得字典中的所有键：即ip地址
        mp = MultiPing(IP_lst)  # 尝试测试ip
        mp.send()
        responses, no_responses = mp.receive(1)  # 获得返回值
        if len(responses) != 0:  # 如果返回的ip地址中有接收到回复的，逐一用ip地址对应字典中的相应值
            for i in responses:
                response.append(IP.get(i))
        else:
            pass
        if len(no_responses) != 0:
            for i in no_responses:
                no_response.append(IP.get(i))
        else:
            pass
        Check_IP_print(response, no_response)
    except:
        console.log("[bold red][ERROR]MultiPingSocketError")
